import { Injectable } from '@nestjs/common';
import { CreateUserDto } from './dto/create-user.dto';
import { UpdateUserDto } from './dto/update-user.dto';
import { Repository } from 'typeorm';
import { InjectRepository } from '@nestjs/typeorm';
import { User } from './entities/user.entity';

@Injectable()
export class UsersService {
  constructor(
    @InjectRepository(User) // 数据库连接
    private usersRepository: Repository<User>,
  ) { }

  // 新增用户
  create(createUserDto: CreateUserDto) {
    const user = this.usersRepository.create(createUserDto);
    return this.usersRepository.save(user);
  }

  // 查询所有用户（支持分页和关键词搜索）
  async findAll(page: number, limit: number, keyword?: string) {
    // 计算偏移量（分页公式：offset = (page - 1) * limit）
    const offset = (page - 1) * limit;

    // 创建查询构建器
    const query = this.usersRepository.createQueryBuilder('user');

    // 如果有关键词，添加模糊搜索条件（假设搜索用户名和邮箱，可根据实际字段调整）
    if (keyword) {
      query.andWhere(
        '(user.name LIKE :keyword)',
        { keyword: `%${keyword}%` }, // % 是 SQL 模糊匹配通配符
      );
    }

    // 执行分页查询（获取数据列表和总条数）
    const [users, total] = await query
      .skip(offset) // 跳过前面的记录
      .take(limit) // 获取当前页记录
      .getManyAndCount(); // 同时返回数据列表和总条数

    // 返回分页结果（包含数据、总条数、总页数等信息）
    return {
      data: {
        users,
        total, // 总条数
        page, // 当前页码
        limit, // 每页条数
        totalPages: Math.ceil(total / limit), // 总页数
      },
    };
  }

  // 查询用户
  findOne(id: number) {
    return this.usersRepository.findOneBy({ id });
  }

  // 更新用户
  update(id: number, updateUserDto: UpdateUserDto) {
    return this.usersRepository.update(id, updateUserDto);
  }

  // 删除用户
  remove(id: number) {
    return this.usersRepository.delete(id);
  }
}
